<?php
include_once 'daos/TorneoDaoImp.php';
include_once 'clases_php/Torneo.php';

class AdministradorTorneo{
	public $torneo; //Temporal
	public $torneos;
	public $torneoDaoImpl;


	function __construct(){
		$this->torneoDaoImpl = new TorneoDaoImp();
	}


	//Autor: Luis Gabriel López
	//Comp: Crear Torneo
	//Clase: AdministradorTorneo
	//Pre: El nombre NO puede ser vacío.
	//Pos: Se crea el torneo con el nombre recibido como parámetro retornando si lo hizo.

	function crearTorneo($nombre, $usuario){

		$retorna = false;
		$existente = false;
		$this->torneos = $this->torneoDaoImpl->traerTorneos();
		foreach($this->torneos as $t){
			if($t->nombre == $nombre){
				$existente = true;
				break;
			}
		}
		if(!$existente){
			$this->torneo = new Torneo($nombre); //Se crea el torneo...
			$retorna = $this->torneoDaoImpl->insertTorneo($this->torneo, $usuario);
		}
		else($retorna = "Duplicate");

		return $retorna;
	}


	//Autor: Luis Gabriel López
	//Comp: Consultar Tabla Posiciones
	//Clase: Torneo
	//Pre: torneo no puede estar vacío
	//Pos: Se retorna la tabla de posiciones si el torneo existe.
	function consultarTablaPosiciones($torneo){
		$this->torneo = $torneo;
		if($torneo) return $this->torneo->calcularTablaPosiciones();
	}

	
	//Autor: Luis Gabriel López y Gustavo Adolfo Bello.
	//Comp: Consultar Tabla Posiciones
	//Clase: MiScore
	//Pre: el Torneo se encuentra en estado 'abierto'.
	//Pos: Se sortea el calendario del Torneo ingresado.
	// Se guarda en BD los Partidos del Torneo ingresado.
	// Se coloca el Torneo seleccionado en estado 'cerrado'.
	// Se retorna el estado de las poscondiciones anteriores.
	function sortearCalendario($nombreTorneo, $equiposTorneo, $todosPartidos){
		$idTorneo = $this->idTorneo($nombreTorneo);
		$torneos = $this->traerTorneosAbiertos();
		$torneo = new Torneo($nombreTorneo);
		$partidos = array();
		$sorteado = false;
		$errorGuardando = false;
		$errorCerrando = false;
		$torneo->equipos = $equiposTorneo;

		//Agregando partidos del torneo al arreglo partidos
		foreach($todosPartidos as $n => $q){
			if($q->idTorneo == $idTorneo ){
				array_push($partidos, $q);
			}
		}

		//Sorteando calendario si existen partidos en el torneo.
		if($partidos != null){
			$partidosSorteados = $torneo->sortearCalendario($partidos);
			if($partidosSorteados!=null){
				//Guardando partidos en BD.
				foreach($partidosSorteados as $i => $p){
					if(isset($p->idPartido)){
						$sorteado = true;
						foreach($p->equipos as $l => $e){
							if($this->torneoDaoImpl->insertPartido($p->idPartido, $e->id_equipo)!=1){
								$errorGuardando = true;
							}
						}
					}
				}

				//Si se guardaron bien los partidos en BD se cierra el Torneo
				if($sorteado && !$errorGuardando){
					if($this->torneoDaoImpl->actualizarEstadoTorneo($idTorneo, 0)!=1){
						$errorCerrando = true;
					}
				}
			}
		}

		if($sorteado && !$errorCerrando && !$errorGuardando) return 1;
		else if($sorteado && !$errorGuardando && !$errorCerrando) return 2;
		else return 0;
	}





	//Autor: Luis Gabriel López.
	//Comp: Agregar Equipos a un Torneo
	//Clase: AdministradorTorneo
	//Pre: idTorneo!=null, equipo.length!=0
	//Pos: Se envía a la clase TorneoDaoImpl los equipos y el torneo y se retorna la respuesta SQL
	// Con esta respuesta se imprime un mensaje de éxito o fallo en la inserción.

	function agregarEquipoTorneo($nombreTorneo, $equipo){
		$idT = $this->idTorneo($nombreTorneo);
		$respuesta = $this->torneoDaoImpl->guardarEquipoTorneo($idT, $equipo);
		if($respuesta==1)echo "¡Equipo agregado satisfactoriamente!";
		else if(strpos($respuesta,"Duplicate")!==false) echo "¡Error!. Ya existe el equipo.";
		else echo "ERROR AGREGANDO ";
		return $respuesta;

	}


	//Autor: Luis Gabriel López
	//Comp: Consultar Tabla Posiciones
	//Clase: AdministradorTorneo
	//Pre:
	//Pos: Se traen de BD todos los torneos. Se retorna esto si no es nulo.
	function  traerTorneos(){
		$this->torneos = $this->torneoDaoImpl->traerTorneos();
		if($this->torneos != null) 	return $this->torneos;
	}


	//Autor: Luis Gabriel López
	//Comp: Consultar Tabla Posiciones
	//Clase: AdministradorTorneo
	//Pre:
	//Pos: Se traen de BD todos los torneos. Se retornan solo los torneos en estado Abierto.
	function  traerTorneosAbiertos(){
		$this->torneos = $this->traerTorneos();
		$lista = array();
		if($this->torneos!=null){
			foreach($this->torneos as $i => $t){
				if($t->estadoTorneo=='1') array_push($lista, $t);
			}
		}
		$torneos = $lista;
		if($torneos != null) 	return $torneos;
	}


	//Autor: Luis Gabriel López
	//Comp: Consultar Tabla Posiciones
	//Clase: AdministradorTorneo
	//Pre:
	//Pos: Se traen de BD todos los torneos. Se retornan solo los torneos en estado Cerrado.
	function  traerTorneosCerrados(){
		$this->torneos = $this->traerTorneos();
		$lista = array();
		if($this->torneos!=null){
			foreach($this->torneos as $i => $t){
				if($t->estadoTorneo=='0') array_push($lista, $t);
			}
		}
		$torneos = $lista;
		if($torneos != null) 	return $torneos;
	}

	function idTorneo($nombreTorneo){
		$con = $this->torneoDaoImpl->idTorneo($nombreTorneo);
		if($con != null) 	return $con;
	}

	function crearPartidos($idTorneo, $partidos){
		$con = $this->torneoDaoImpl->crearPartidos($idTorneo, $partidos);
		if($con != null) 	return $con;
	}
	function traerPartidos($idTorneo){
		$con = $this->torneoDaoImpl->traerPartidos($idTorneo);
		if($con != null) 	return $con;
	}
	//Autor: Juan Diego Trujillo Perez
	//Comp: Buscar Partido
	//Clase: AdministradorTorneo
	//Pre:  El id del torneo no puede ser nulo
	//Pos: Se trae el nombre del torneo 
	function nombreTorneo($idTorneo){
		$con = $this->torneoDaoImpl->nombreTorneo($idTorneo);
		if($con != null) return $con;
	}	
}
?>